home *** CD-ROM | disk | FTP | other *** search
- /* SE-Protokoll zur Kommunikation zwischen Shells zur Programmentwicklung
- * und Editoren. (c) DIRK STEINS @K2.MAUS.DE
- *
- * Dieses Protokoll dient dazu, unter Multitasking-Systemen die Shell
- * zur Compilierung und ähnlichen Sachen zu veranlassen, und um Fehler-
- * meldungen und/oder Fehlerdateien an den Editor zurückzugeben.
- *
- * Kommandos bzw. Nachrichten von der Shell zum Editor beginnen
- * mit SE_, Nachrichten vom Editor zur Shell beginnen mit ES_
- *
- * Da teilweise Zeiger auf Speicherbereiche übergeben werden, ist vom
- * jeweiligen Absender der Nachricht darauf zu achten, daß diese
- * Speicherbereiche vom Empfänger auch lesbar sind (Memory Protection!).
- * Dafür sind diese als Readable zu allozieren!
- *
- * Version Datum Änderungen
- * =====================================================================
- * 0.1 10.1.94 Erster Entwurf
- * 0.2 17.1.94 SE_TERMINATE hinzugefügt
- */
-
- #define SE_INIT 0x4200
- /* Die Shell fragt an, ob ein Editor das SE-Protokoll
- * versteht.
- * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet
- * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden
- * Wort 6: Unterstütze Versionsnummer des Protokolls
- * Als Antwort erhält es ein ES_OK vom Editor.
- */
- #define SE_OK 0x4201
- /* Die Shell sagt dem Editor, das sie das Protokoll
- * versteht.
- * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet
- * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden
- * Wort 6: Unterstütze Versionsnummer des Protokolls
- * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird
- */
- #define SE_ACK 0x4202
- /* Die Shell bestätigt den Empfang eines Editorkommandos und gibt
- * zurück, ob das Kommando ausgeführt wird.
- * Wort 3: TRUE: Kommando wird verstanden und ausgeführt.
- * FALSE: Das Kommando wird nicht verstanden
- * Eine SE_ACK mit TRUE sagt nichts darüber aus, ob das Kommando erfolg-
- * reich ausgeführt wurde. Es sagt nur, daß die Shell das Kommando
- * versteht und ausführen wird!
- */
- #define SE_OPEN 0x4203
- /* Die Shell sagt dem Editor, daß er einen Text öffnen
- * soll. Als Antwort erhält die Shell ein ES_ACK
- * Wort 3+4: Ein Zeiger auf den Filenamen des zu öffnenden Files
- */
- #define SE_ERROR 0x4204
- /* Es ist ein Fehler beim Compilieren aufgetreten.
- * Wort 3+4: Ein Zeiger auf eine Infostruktur, die wie folgt
- * aufgebaut ist:
- * Wort 0+1: Ein Zeiger auf den Namen des compilierten Textes.
- * Wort 2+3: Ein Zeiger auf den Text der Fehlermeldung
- * Wort 4 : Die Fehlernummer
- * Wort 5 : Die Fehlerspalte
- * Wort 6+7: Die Fehlerzeile
- * Mit ES_ACK bestätigt der Editor die Meldung.
- */
- #define SE_ERRFILE 0x4205
- /* Es sind Fehler aufgetreten. Die Fehlermeldungen stehen in einem
- * Errorfile, welches in der Message spezifiziert wird.
- * Wort 3+4: Ein Zeiger auf den Filenamen des Errorfiles mit den
- * Fehlermeldungen
- * Wort 5+6: Ein Zeiger auf den Namen des compilierten Textes
- * Mit ES_ACK bestätigt der Editor die Meldung.
- */
- #define SE_PROJECT 0x4206
- /* Die Shell teilt dem Editor mit, daß das Projekt
- * geändert wurde. Der Filename des aktuellen
- * Projektfiles wird als Parameter übergeben
- * Wort 3+4: Ein Zeiger auf den Namen des Projektfiles
- * Der Editor bestätigt mit ES_ACK.
- * Eine vernünftige Reaktion des Editors wäre es in dem Fall,
- * ebenfalls das Projekt zu wechseln, sofern er diese unterstützt.
- */
- #define SE_QUIT 0x4207
- /* Die Shell teilt dem Editor mit, daß sie jetzt beendet wird.
- * Der Editor sollte in dem Fall die Shell als Kommunikationspartner
- * vergessen.
- * Parameter gibt es keine.
- * Es wird keine Antwort erwartet!
- */
- #define SE_TERMINATE 0x4208
- /* Die Shell teilt dem Editor mit, daß dieser sich beenden soll.
- * Der Editor sollte in dem Fall sich selbst beenden und seinen ganz
- * normalen Terminierungsprozeß durchlaufen (und in dem auch ein
- * ES_QUIT schicken!). Der Grund für so eine Meldung der Shell könnte
- * zum Beispiel zu wenig Speicher zum compilieren sein.
- * Mit ES_ACK bestätigt der Editor die Meldung.
- */
-
- #define ES_INIT 0x4240
- /* Ein Editor fragt an, ob eine Shell das SE-Protokoll versteht.
- * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden
- * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden
- * Wort 6: Unterstütze Versionsnummer des Protokolls
- * Als Antwort erhält es SE_OK von der Shell
- */
- #define ES_OK 0x4241
- /* Der Editor beantwortet die Anfrage der Shell nach dem Protokoll.
- * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden
- * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden
- * Wort 6: Unterstütze Versionsnummer des Protokolls
- * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird
- */
- #define ES_ACK 0x4242
- /* Der Editor bestätigt den Empfang des Kommandos
- * Wort 3: TRUE: Kommando wird verstanden und ausgeführt.
- * FALSE: Das Kommando wird nicht verstanden
- * Eine ES_ACK mit TRUE sagt nichts darüber aus, ob das Kommando erfolg-
- * reich ausgeführt wurde. Es sagt nur, daß der Editor das Kommando
- * versteht und ausführen wird!
- */
- #define ES_COMPILE 0x4243
- /* Der Editor sagt der Shell, daß sie ein File übersetzen soll.
- * Ein Pointer auf den Dateinamen wird in der Message übergeben.
- * Wort 3+4: Zeiger auf den Namen der zu compilierenden Datei.
- * Diese Nachricht muß mit SE_ACK bestätigt werden.
- */
- #define ES_MAKE 0x4244
- /* Der Editor sagt der Shell, daß sie ein Make ausführen soll.
- * Ein Filename kann in der Message übergeben werden, muß aber
- * nicht gesetzt sein und muß von der Shell auch nicht beachtet
- * werden!
- * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
- * Die Shell bestätigt mit SE_ACK.
- */
- #define ES_MAKEALL 0x4245
- /* Der Editor sagt der Shell, daß ein komplettes Make All ausgeführt
- * werden soll. Ein Filename für das Makefile kann (muß nicht) in
- * der Message übergeben werden.
- * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
- * Die Shell bestätigt mit SE_ACK.
- */
- #define ES_LINK 0x4246
- /* Der Editor sagt der Shell, daß das Programm
- * gelinkt werden soll. Ein Filename kann
- * in der Message übergeben werden, muß aber
- * nicht unbedingt beachtet werden von der Shell!
- * Wort 3+4: Zeiger auf den Namen der Source, die gelinkt werden soll
- * (oder NULL)
- * Die Shell bestätigt mit SE_ACK.
- */
- #define ES_EXEC 0x4247
- /* Der Editor sagt der Shell, daß das Programm
- * zu der Source ausgeführt werden soll. Ein
- * Filename kann übergeben werden, muß von der
- * Shell aber nicht beachtet werden.
- * Wort 3+4: Zeiger auf den Namen des auszuführenden Files (oder NULL)
- * Bei einer Sourcedatei ist diese ggf. noch zu
- * compilieren und/oder zu linken
- * Die Shell bestätigt mit SE_ACK.
- */
- #define ES_MAKEEXEC 0x4248
- /* Die Shell soll ein Make ausführen und danach das Programm ausführen.
- * Ein Filename für das Makefile kann (muß nicht) in der Message
- * übergeben werden.
- * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
- * Die Shell bestätigt mit SE_ACK.
- */
- #define ES_PROJECT 0x4249
- /* Der Editor teilt der Shell mit, daß das Project
- * geändert/gewechselt wurde. Der Filename des
- * Projektfiles wird als Parameter in der Message
- * übergeben.
- * Wort 3+4: Zeiger auf den Namen des Projektfiles
- * Die Shell bestätigt mit SE_ACK.
- * Eine vernünftige Reaktion der Shell wäre in dem Fall, ebenfalls
- * das Projekt zu wechseln, sofern es diese unterstützt.
- */
- #define ES_QUIT 0x424A
- /* Der Editor teilt der Shell mit, daß er jetzt beendet wird.
- * Die Shell sollte in dem Fall den Editor als Kommunikationspartner
- * vergessen.
- * Parameter gibt es keine.
- * Es wird keine Antwort erwartet!
- */
-
- #define SE_DATA 0
- /* Nur für Typdeklaration benutzt, eigentlich überflüssig
- */
-
- #define SEPROTOVERSION 0x0100 /* Die Versionsnummer des Protokolls.
- * Highbyte ist die Major Number
- * Lowbyte ist die Lower Number
- */
-
- /* Typdefinitionen für die Nachrichten
- */
-
- /* Dies definiert die einzelnen Bits, welche Nachrichten unterstützt werden
- */
- #define seInit 0x0001
- #define seOk 0x0002
- #define seAck 0x0004
- #define seOpen 0x0008
- #define seError 0x0010
- #define seErrfile 0x0020
- #define seProject 0x0040
-
- #define esInit 0x0001
- #define esOk 0x0002
- #define esAck 0x0004
- #define esCompile 0x0008
- #define esMake 0x0010
- #define esMakeall 0x0020
- #define esLink 0x0040
- #define esExec 0x0080
- #define esMakeexec 0x0100
- #define esProject 0x0200
-
- typedef struct
- {
- char *errfile; /* Zeiger auf den Namen der compilierten Datei */
- char *errmess; /* Zeiger auf die Fehlermeldung */
- WORD errnum; /* Die Fehlernummer */
- WORD errcol;
- LONG errline;
- }ERRINFO;
-
- /*
- TYPE tShellCommands = (seInit, seOk, seAck, seOpen, seError, seErrfile,
- seProject);
-
- tEditCommands = (esInit, esOk, esAck, esCompile, esMake, esMakeall,
- esLink, esExec, esMakeexec, esProject);
-
- tPtrString = POINTER TO ARRAY [0..255] OF CHAR;
- /* Zeiger auf einen nullterminierten String
- */
-
- LONGBITSET = SET OF [0..31];
- /* Leider kennt das nicht jeder Compiler
- */
-
- tErrInfo = RECORD
- errFile : tPtrString;
- /* Zeiger auf den Namen der compilierten Datei
- */
- errMess : tPtrString;
- /* Zeiger auf die Fehlermeldung
- */
- errNum : INTEGER;
- /* Die Fehlernummer
- */
- END;
- tPtrErrInfo = POINTER TO tErrInfo;
-
-
- /* Über diese Recorddefinition kann man alle
- * Messages des Protokolls behandeln
- */
-
- tMessRec = RECORD
- msg : INTEGER;
- /* Messagenummer, Wort 0 */
- apId : INTEGER;
- /* Applikation ID des Senders, Wort 1 */
- overLen : INTEGER;
- /* Überlänge der Nachricht (immer 0 für SE-Protokoll), Wort 2 */
- CASE : CARDINAL OF
- SE_INIT,
- ES_INIT : shellBits: BITSET;
- /* Bits, die angeben, welche Shell-Nachrichten
- * unterstützt werden (Wort 3)
- */
- editBits : LONGBITSET;
- /* Bits, die angeben, welche Editor-Nachrichten
- * unterstützt werden (Worte 4 und 5)
- */
- version : CARDINAL;
- /* Unterstütze Versionsnummer des Protokolls
- * Aktuell: $100
- */
- | SE_OK,
- ES_OK : okShellBits: BITSET;
- /* Bits, die angeben, welche Shell-Nachrichten
- * unterstützt werden (Wort 3)
- */
- okEditBits : LONGBITSET;
- /* Bits, die angeben, welche Editor-Nachrichten
- * unterstützt werden (Worte 4 und 5)
- */
- okVersion: CARDINAL;
- /* Unterstütze Versionsnummer des Antwortenden
- * Aktuell: $100
- */
- otherId : INTEGER;
- /* Die ApId des Senders, auf das dies eine Antwort
- * ist (Wort 7)
- */
- | SE_ACK,
- ES_ACK : acknowledge: BOOLEAN;
- /* TRUE: Kommando wurde akzeptiert,
- * FALSE: Kommando konnte nicht ausgeführt werden
- */
- | SE_OPEN : namePtr : tPtrString;
- /* Zeiger auf den Namen des zu ladenden Textes
- * (Worte 3 und 4)
- */
- | SE_ERROR : errorPtr : tPtrErrInfo;
- /* Zeiger auf Speicherbereich, der die
- * Fehlermeldung spezifiziert.
- */
- errorRow : INTEGER;
- /* Die Spalte, in der der Fehler aufgetreten ist
- * (Wort 5)
- */
- errorLine : LONGINT;
- /* Die Zeile, in der der Fehler aufgetreten ist
- * (Worte 6 und 7)
- */
- | SE_ERRFILE : errPtr : tPtrString;
- /* Zeiger auf den Namen des Errorfiles */
- fnamePtr : tPtrString;
- /* Zeiger auf den Namen der compilierten Datei */
- | SE_PROJECT,
- ES_COMPILE,
- ES_MAKE,
- ES_MAKEALL,
- ES_LINK,
- ES_EXEC,
- ES_MAKEEXEC,
- ES_PROJECT : filePtr : tPtrString;
- /* Zeiger auf den Filenamen des Files, welches
- * behandelt werden soll
- */
- | SE_QUIT,
- SE_TERMINATE,
- ES_QUIT,
- SE_DATA: data : ARRAY [0..4] OF INTEGER;
- /* Definition für Maximallänge des Records
- */
- END;
- END;
-
- tPtrMessRec = POINTER TO tMessRec;
- /* Ein Zeiger auf diese Messageblock
- */
- */
-
-
-